]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
network: Keep key focus in dialog when removing networks
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 2 Mar 2018 22:44:44 +0000 (23:44 +0100)
committerJonas Ådahl <jadahl@gmail.com>
Thu, 31 May 2018 11:42:14 +0000 (11:42 +0000)
When the actor that has the key focus is destroyed, Clutter moves
the focus to the stage. In case the destroyed actor was inside a
ModalDialog, this breaks any keyboard interaction: keynav is broken
because the stage isn't in any focus chain, and access keys like
Escape because they are handled on the dialog's parent.

The only dialog that may destroy a child without recreating the dialog
buttons (and thus moving the key focus there) is the WirelessDialog,
fix it by keeping the key focus within the dialog when removing networks
from the list.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/76

js/ui/status/network.js

index a71297eed6fdd36d91b6d22fb42155d928050a89..bf3a2bac6a59350e0985097a81f5533362b18182 100644 (file)
@@ -1164,6 +1164,11 @@ var NMWirelessDialog = new Lang.Class({
             Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor);
             this._selectNetwork(network);
         });
+        network.item.actor.connect('destroy', () => {
+            let keyFocus = global.stage.key_focus;
+            if (keyFocus && keyFocus.contains(network.item.actor))
+                this._itemBox.grab_key_focus();
+        });
     },
 });